// import router from 'umi/router';
import axios from 'axios';
import qs from 'qs';
import { message, notification } from 'antd';
import { CODE_MESSAGE } from '@/utils/constants';

const config = {
  headers: {
    "Content-Type": "multipart/form-data"
  }
}

export default function request(url, data={}, type='GET') {
  return new Promise((resolve, reject) => {
    let promise;
    // 1. 执行异步ajax请求
    if(type==='GET') { // 发GET请求
      promise = axios.get(url, { // 配置对象
        params: data // 指定请求参数
      });
    } else { // 发POST请求
        promise = axios.post(url, qs.stringify(data), config);
    }
    // 2. 如果成功了, 调用resolve(value)
    promise.then(response => {
      resolve(response.data);
      // 3. 如果失败了, 不调用reject(reason), 而是提示异常信息
      if(response.data && typeof response.data.state !== undefined) {
        resolve(response.data);
      } else {
        message.error('Response error code : ' + JSON.stringify(response.data));
      }
    }).catch(error => {
      // message.error('请求出错了: ' + error.message);
      if (error && error.response) {
        checkErrorStatus(error.response);
      } else if (error.request) {
        // 发送请求但是没有响应返回
        message.error('Response error : ' + error.request);
      } else {
        // 其他错误
        message.error('Response error : ', error.message);
      }
    });
  });
}

function checkErrorStatus(response) {
  const { status, statusText, url } = response;
  const errorText = CODE_MESSAGE[status] || statusText;
  notification.error({
    message: `Request error ${status} ${url}`,
    description: errorText,
  });
  // if (status === 403) {
  //   router.push('/exception/403');
  // }
  // if (status <= 504 && status >= 500) {
  //   router.push('/exception/500');
  // }
  // if (status >= 404 && status <= 422) {
  //   router.push('/exception/404');
  // }
}
